/*!
 * Goto line dialog plugin for Editor.md
 *
 * @file        goto-line-dialog.js
 * @author      pandao
 * @version     1.2.1
 * @updateTime  2015-06-09
 * {@link       https://github.com/pandao/editor.md}
 * @license     MIT
 */

(function () {

  var factory = function (exports) {

    var $ = jQuery;
    var pluginName = "goto-line-dialog";

    var langs = {
      "zh-cn": {
        toolbar: {
          "goto-line": "跳转到行"
        },
        dialog: {
          "goto-line": {
            title: "跳转到行",
            label: "请输入行号",
            error: "错误："
          }
        }
      },
      "zh-tw": {
        toolbar: {
          "goto-line": "跳轉到行"
        },
        dialog: {
          "goto-line": {
            title: "跳轉到行",
            label: "請輸入行號",
            error: "錯誤："
          }
        }
      },
      "en": {
        toolbar: {
          "goto-line": "Goto line"
        },
        dialog: {
          "goto-line": {
            title: "Goto line",
            label: "Enter a line number, range ",
            error: "Error: "
          }
        }
      }
    };

    exports.fn.gotoLineDialog = function () {
      var _this = this;
      var cm = this.cm;
      var editor = this.editor;
      var settings = this.settings;
      var path = settings.pluginPath + pluginName + "/";
      var classPrefix = this.classPrefix;
      var dialogName = classPrefix + pluginName, dialog;

      $.extend(true, this.lang, langs[this.lang.name]);
      this.setToolbar();

      var lang = this.lang;
      var dialogLang = lang.dialog["goto-line"];
      var lineCount = cm.lineCount();

      dialogLang.error += dialogLang.label + " 1-" + lineCount;

      if (editor.find("." + dialogName).length < 1) {
        var dialogContent = [
          "<div class=\"editormd-form\" style=\"padding: 10px 0;\">",
          "<p style=\"margin: 0;\">" + dialogLang.label + " 1-" + lineCount + "&nbsp;&nbsp;&nbsp;<input type=\"number\" class=\"number-input\" style=\"width: 60px;\" value=\"1\" max=\"" + lineCount + "\" min=\"1\" data-line-number /></p>",
          "</div>"
        ].join("\n");

        dialog = this.createDialog({
          name: dialogName,
          title: dialogLang.title,
          width: 400,
          height: 180,
          mask: settings.dialogShowMask,
          drag: settings.dialogDraggable,
          content: dialogContent,
          lockScreen: settings.dialogLockScreen,
          maskStyle: {
            opacity: settings.dialogMaskOpacity,
            backgroundColor: settings.dialogMaskBgColor
          },
          buttons: {
            enter: [lang.buttons.enter, function () {
              var line = parseInt(this.find("[data-line-number]").val());

              if (line < 1 || line > lineCount) {
                alert(dialogLang.error);

                return false;
              }

              _this.gotoLine(line);

              this.hide().lockScreen(false).hideMask();

              return false;
            }],

            cancel: [lang.buttons.cancel, function () {
              this.hide().lockScreen(false).hideMask();

              return false;
            }]
          }
        });
      }

      dialog = editor.find("." + dialogName);

      this.dialogShowMask(dialog);
      this.dialogLockScreen();
      dialog.show();
    };

  };

  // CommonJS/Node.js
  if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
    module.exports = factory;
  } else if (typeof define === "function")  // AMD/CMD/Sea.js
  {
    if (define.amd) { // for Require.js

      define(["editormd"], function (editormd) {
        factory(editormd);
      });

    } else { // for Sea.js
      define(function (require) {
        var editormd = require("./../../editormd");
        factory(editormd);
      });
    }
  } else {
    factory(window.editormd);
  }

})();
